package com.example.multiaccountfetcher.strategy;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Optional;

/**
 * 数据拉取策略工厂
 * 负责管理和提供不同的数据拉取策略
 */
@Component
public class DataFetchStrategyFactory {
    
    @Autowired
    private List<DataFetchStrategy> strategies;
    
    private final Map<String, DataFetchStrategy> strategyMap = new HashMap<>();
    
    @PostConstruct
    public void init() {
        // 初始化策略映射
        for (DataFetchStrategy strategy : strategies) {
            strategyMap.put(strategy.getInterfaceType(), strategy);
        }
    }
    
    /**
     * 获取指定接口类型的策略
     * @param interfaceType 接口类型
     * @return 对应的数据拉取策略
     */
    public Optional<DataFetchStrategy> getStrategy(String interfaceType) {
        return Optional.ofNullable(strategyMap.get(interfaceType));
    }
    
    /**
     * 获取所有可用的策略
     * @return 策略映射表
     */
    public Map<String, DataFetchStrategy> getAllStrategies() {
        return new HashMap<>(strategyMap);
    }
}